
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#include <string.h>

void PrintArray(int* a, int n);

void QuickSort1(int* a, int l, int r);
void QuickSort2(int* a, int l, int r);
void QuickSort3(int* a, int l, int r);
void QuickSortNonR(int* a, int l, int r);

void MergeSort(int* a, int n);
void MergeSortY(int* a, int l, int r, int* tmp);
void MergeSortNonR(int* a, int n);
void MergeSortNonRY(int* a, int l, int r, int* tmp);

void CountSort(int* a, int n);


typedef int STDataType;
typedef struct Stack
{    
    STDataType* a;
    int top;                                                                                              
    int capacity;    
}Stack;
void StackInit(Stack* ps);    
void STPush(Stack* ps, STDataType x);    
void STPop(Stack* ps);    
bool STEmpty(Stack* ps);
STDataType STTop(Stack* ps);
void STDestroy(Stack* ps);

